package net.maku.events.service;

import net.maku.events.vo.UserApplyCommentVO;
import net.maku.framework.common.utils.PageResult;
import net.maku.framework.mybatis.service.BaseService;
import net.maku.events.vo.UserSnapshotVO;
import net.maku.events.query.UserSnapshotQuery;
import net.maku.events.entity.UserSnapshotEntity;

import java.util.List;

/**
 * 用户随手拍作品
 *
 * @author 阿沐 babamu@126.com
 * @since 1.0.0 2025-03-22
 */
public interface UserSnapshotService extends BaseService<UserSnapshotEntity> {

    /**
     * 分页查询查询
     *
     * @param query 查询条件
     * @return 结果
     */
    PageResult<UserSnapshotVO> page(UserSnapshotQuery query);

    /**
     * 查询出自己拍的随手拍
     *
     * @param ids          待检验的随手拍id数组
     * @param businessType 业务类型
     * @return 结果
     */
    List<Long> checkSelfEntity(List<Long> ids, Integer businessType);

    /**
     * 校验是否上传随手拍活动
     *
     * @param businessId    活动id
     * @param businessSonId 活动子活动id
     * @param businessType  活动类型
     * @param todayFlag     是否每日
     * @return 结果
     */
    boolean checkAlreadySave(Long businessId, Long businessSonId, Integer businessType, boolean todayFlag);

    /**
     * 添加随手拍
     *
     * @param businessId    活动id
     * @param businessSonId 活动子活动id
     * @param walkFeatureId 健步走关联id
     * @param businessType  活动类型
     * @param vo            随手拍
     */
    void save(Long businessId, Long businessSonId, Long walkFeatureId, Integer businessType, UserSnapshotVO vo);

    /**
     * 获取随手拍的详情
     *
     * @param id 随手拍的详情
     * @return 结果
     */
    UserSnapshotVO getInfoById(Long id);

    /**
     * 删除随手拍
     *
     * @param idList 待删除的id数组
     */
    void delete(List<Long> idList);

    /**
     * 点赞或者取消
     *
     * @param snapshotId 随手拍id
     */
    void giveOrCancel(Long snapshotId);

    /**
     * 发布评论
     *
     * @param applyCommentVO 发布内容
     */
    void applyComment(UserApplyCommentVO applyCommentVO);

    /**
     * 删除评论
     *
     * @param commentId 评论id
     */
    void removeComment(Long commentId);

    /**
     * 评论点赞或取消
     *
     * @param commentId 评论id
     */
    void giveOrCancelComment(Long commentId);
}